﻿using Levfier.GUI.EditorControls.Chains;
using Levfier.Proccessors;

namespace Levfier.GUI.EditorControls
{
    /// <summary>
    /// プロセッサに対応するGUIコントロール
    /// </summary>
    public interface IProccessorControl : IRouteCheckable
    {
        /// <summary>
        /// プロセッサを取得する
        /// </summary>
        /// <returns>プロセッサ</returns>
        IProccessable GetProccessor();

        /// <summary>
        /// 上流チェインコントロールを接続する
        /// </summary>
        /// <param name="chainControl">接続対象コントロール</param>
        void SetUpperChainControl(IChainControl chainControl);

        /// <summary>
        /// 上流チェインコントロールを削除する
        /// </summary>
        /// <param name="chainControl">削除対象コントロール</param>
        void RemoveUpperChainControl(IChainControl chainControl);

        /// <summary>
        /// 下流チェインコントロールを接続する
        /// </summary>
        /// <param name="chainControl">接続対象コントロール</param>
        void SetLowerChainControl(IChainControl chainControl);

        /// <summary>
        /// 下流チェインコントロールを削除する
        /// </summary>
        /// <param name="chainControl">削除対象コントロール</param>
        void RemoveLowerChainControl(IChainControl chainControl);
    }
}
